From: Chunyan Liu Date: Mon, 7 Jul 2014 06:34:34 +0000 (+0800) Subject: xl.cfg: add 'cmdline' in config file X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~4507 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22Dat/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22Dat?a=commitdiff_plain;h=986aea7fbe3c6ff3c4d2312ca8a4365930401e40;p=xen.git xl.cfg: add 'cmdline' in config file Currently in xl.cfg, use 'root' and 'extra' to generate the command line. 'cmdline' could be a more generic equivalent. So, add 'cmdline' in xl.cfg and let it be preferred. 'root' and 'extra' still works. But when 'cmdline' is specified, 'root' and 'extra' will be ignored. [HVM config example] [snip] builder="hvm" device_model_override="/home/cyliu/git/qemu/x86_64-softmmu/qemu-system-x86_64" kernel="/mnt/vmlinuz-3.0.13-0.27-default" ramdisk="/mnt/initrd-3.0.13-0.27-default" root="/dev/hda2" extra="console=tty0 console=ttyS0" [snip] or: [snip] builder="hvm" device_model_override="/home/cyliu/git/qemu/x86_64-softmmu/qemu-system-x86_64" kernel="/mnt/vmlinuz-3.0.13-0.27-default" ramdisk="/mnt/initrd-3.0.13-0.27-default" cmdline="root=/dev/hda2 console=tty0 console=ttyS0" [snip] Signed-off-by: Chunyan Liu Acked-by: Ian Campbell Acked-by: Ian Campbell --- diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 index 9ab0ad68c3..f1fc906d0f 100644 --- a/docs/man/xl.cfg.pod.5 +++ b/docs/man/xl.cfg.pod.5 @@ -345,6 +345,13 @@ Load the specified file as the kernel image. Load the specified file as the ramdisk. +=item B + +Append B to the kernel command line. (Note: it is +guest specific what meaning this has). It can replace B +plus B and is preferred. When B is set, +B and B will be ignored. + =item B Append B to the kernel command line (Note: it is guest diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 9120c1e0fa..409a795268 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -694,19 +694,27 @@ static void parse_top_level_sdl_options(XLU_Config *config, static char *parse_cmdline(XLU_Config *config) { char *cmdline = NULL; - const char *root = NULL, *extra = ""; + const char *root = NULL, *extra = NULL, *buf = NULL; + xlu_cfg_get_string (config, "cmdline", &buf, 0); xlu_cfg_get_string (config, "root", &root, 0); xlu_cfg_get_string (config, "extra", &extra, 0); - if (root) { - if (asprintf(&cmdline, "root=%s %s", root, extra) == -1) - cmdline = NULL; + if (buf) { + cmdline = strdup(buf); + if (root || extra) + fprintf(stderr, "Warning: ignoring root= and extra= " + "in favour of cmdline=\n"); } else { - cmdline = strdup(extra); + if (root) { + if (asprintf(&cmdline, "root=%s %s", root, extra) == -1) + cmdline = NULL; + } else if (extra) { + cmdline = strdup(extra); + } } - if ((root || extra) && !cmdline) { + if ((buf || root || extra) && !cmdline) { fprintf(stderr, "Failed to allocate memory for cmdline\n"); exit(1); }